
//809.情感丰富的文字
class Solution {
public:
    int expressiveWords(string s, vector<string>& words) {
        //枚举words中的每一个单词，使用双指针判断是否满足条件
        int n=s.size(),ret=0,count=0;
        for(auto str:words)
        {
            int m=str.size(),i=0,j=0;
            char prev='0';
            while(i<n&&j<m)
            {
                while(i<n&&j<m&&s[i]==str[j]) 
                {
                    if(i>0&&s[i]==s[i-1]) count++; //与上一个字符相同是重复字符
                    else count=1;  //重新开始计数
                    prev=s[i];
                    i++,j++;
                }
                while(i<n&&s[i]==prev) count++,i++;  //处理新增的重复数
                if(count<3||(i<n&&j<m&&s[i]!=str[j])) break; 
            }
            //在更新结果的时候对与count==1||count>3的情况必定都是满足的，但是对于count==2的情况要进行特殊判断
            if(i==n&&j==m&&(count!=2||s[n-count]==str[m-count])) ret++; 
        }
        return ret;
    }
};